#include "my_head.h"

int main(int argc, char const *argv[])
{
    int a;//操作数字
    int n=0;//注册账号的数量
    int b;//输入的帐号
    char p[20];//输入的密码
    p_flight_node f=NULL;//管理航班信息链表的头结点
    Initnode(&f);//初始化
    p_user_node u=NULL;//管理用户信息链表的头结点
    UserInit(&u);//用户初始化
    p_order_node o=NULL;//管理预订航班链表的头结点
    Order_Init(&o);//预订初始化

    while(1)
    {
        start:
        printf("================\n");
        printf("[1]注册 [2]登录 [3]退出\n");
        printf("请选择你要进行的操作:");
        scanf("%d",&a);
        switch(a)
        {
            case 1:Register(u,&n);break;
            case 2:bool Login_success=Login(u,&b,p);
                    if(Login_success==false)
                    {
                        break;
                    }
                    //用户和管理员同时有权限时
                    if(u->next!=NULL&&u->data.user_account.permission==1&&
                        u->next->data.user_account.permission==2)
                    {
                     if(b==123&&strcmp(p,"123")==0)
                     {
                        goto start1;
                     } else
                     {
                        goto start2;
                     }
                    }
                    //仅管理员有权限时
                   if(u->data.user_account.permission==1&&u->next==NULL)
                   {
                    goto start1;
                   }
                   //仅管理员有权限时
                   if(u->data.user_account.permission==1&&u->next!=NULL&&
                    (u->next->data.user_account.permission==0||
                    u->next->data.user_account.permission==1))
                   {
                    goto start1;
                   }
                   //仅用户有权限时
                   if(u->next!=NULL&&u->next->data.user_account.permission==2&&
                    u->data.user_account.permission==0)
                   {
                    goto start2;
                   }else
                   {
                    printf("账号有误,请重新登录！\n");
                    break;
                   }
            case 3: Destorynode(&f);UserDestory(&u);Order_Destory(&o);return 0;
            default :printf("操作错误,请重新选择!\n");break;
        }
    }
    start1:
    if(u->data.user_account.permission==1)
    {
        printf("欢迎管理员进入航班管理系统！\n");
        sleep(1);
        printf("============\n");
        start3:
        printf("=============\n");
        printf("[1]航班管理 [2]用户管理 [3]返回 [4]退出\n");
        printf("请选择你要进行的操作:");
        scanf("%d",&a);  
        if(a<1||a>4)
        {
            printf("操作失败，请重新选择！\n");
            printf("===========\n");
            goto start3;
        }
        if(a==1)
        {
            while(1)
            {  
                 printf("==============\n");
                printf("[1]添加航班 [2]显示航班 [3]查询航班 [4]修改航班 [5]删除航班 [6]返回 [7]退出\n");
                printf("请选择你要进行的操作:");
                scanf("%d",&a);
                switch(a)
                {
                    case 1:Insertnode(f);break;
                    case 2:Shownode(f);break;
                    case 3:Searchnode(f);break;
                    case 4:Modifynode(f);break;
                    case 5:Deletenode(f);break;
                    case 6:goto start3;
                    case 7:Destorynode(&f);UserDestory(&u);Order_Destory(&o);return 0;
                    default :printf("操作错误,请重新选择!\n");break;
                }
            }
        }
        if(a==2)
        {
            while(1)
            {   
                printf("=============\n");
                printf("[1]添加用户 [2]显示用户 [3]查询用户 [4]修改用户 [5]删除用户 [6]返回 [7]退出\n");
                printf("请选择你要进行的操作:");
                scanf("%d",&a);
                switch(a)
                {
                    case 1:UserInsert(u);break;
                    case 2:UserShow(u);break;
                    case 3:UserSearch(u);break;
                    case 4:UserModify(u);break;
                    case 5:UserDelete(u);break;
                    case 6:goto start3;
                    case 7:Destorynode(&f);UserDestory(&u);Order_Destory(&o);return 0;
                    default :printf("操作错误,请重新选择!\n");break;
                }
            }
        }
        if(a==3)
        {
            goto start;
        }
        if(a==4)
        {
            return 0;
        }
    }
    start2:
    if((u->next)->data.user_account.permission==2)
    {
        printf("欢迎用户进入航班管理系统！\n");
        sleep(1);
        printf("================\n");
        start4:
        printf("================\n");
        printf("[1]航班查询 [2]我的订单 [3]修改个人信息 [4]显示个人信息 [5]返回 [6]退出\n");
        printf("请选择你要进行的操作:");
        scanf("%d",&a);
        if(a==1)
        {
            while(1)
            {   
                printf("=============\n");
                printf("[1]显示航班 [2]查询航班 [3]返回 [4]退出\n");
                printf("请选择你要进行的操作:");
                scanf("%d",&a);
                switch(a)
                {
                    case 1:Shownode(f);break;
                    case 2:Searchnode(f);break;
                    case 3:goto start4;
                    case 4:Destorynode(&f);UserDestory(&u);Order_Destory(&o);return 0;
                    default :printf("操作错误,请重新选择!\n");break;
                }
            }
        }
        if(a==2)
        {
            while(1)
            {   
                printf("===============\n");
                printf("[1]预订航班 [2]查询预订记录 [3]取消预订 [4]返回 [5]退出\n");
                printf("请选择你要进行的操作:");
                scanf("%d",&a);
                switch(a)
                {
                    case 1:Order_Flight(o,f);break;
                    case 2:Order_Show(o);break;
                    case 3:Order_Delete(o);break;
                    case 4:goto start4;
                    case 5:Destorynode(&f);UserDestory(&u);Order_Destory(&o);return 0;
                    default :printf("操作错误,请重新选择!\n");break;
                }
            }
        }
        if(a==3)
        {
            modify_information(u,&b,p);
            goto start4;
        }
        if(a==4)
        {
            show_information(u,&b,p);
            goto start4;
        }
        if(a==5)
        {
            goto start;
        }
        if(a==6)
        {
            Destorynode(&f);
            UserDestory(&u);
            Order_Destory(&o);
            return 0;
        }
    }
    //销毁航班、用户链表
    Destorynode(&f);
    UserDestory(&u);
    Order_Destory(&o);
    return 0;
}
